NGS科研必备!数据整合神器之dplyr包
dplyr包可用于处理dataframe格式数据,相较于它的前身plyr包,大幅提高了速度,本文着重介绍在数据整合时使用频率较高的几个函数,定会让你在数据整合过程中更为方便快捷。
dplyr也是大神HadleyWickham的大作,HadleyWickham可谓是改变了R的人,其代表作品还有ggplot2、resape等非常有名的软件包,先用大神的帅照镇楼:
dplyr包的开源代码可在github上阅读,软件包安装如下:
# 安装大神所有的软件包:
install.packages("tidyverse")
# 或者只安装dplyr:
install.packages("dplyr")
# 也可安装开发版的dplyr:
# 安装github上的包,需要先安装devtools工具包:
#install.packages("devtools")
devtools::install_github("tidyverse/dplyr")
本文主要介绍5个常用的函数:
mutate() 对已有列数据变换并添加新的列,类似标准函数transform
select() 按照列名筛选列,可结合starts_with,ends_with,contains,matches,one_of,num_range和everything等使用
filter() 按照已定条件对行做过滤,类似标准函数subset
arrange() 对数据进行排序,类似标准函数order
summarise() 对数据进行汇总操作,可结合group_by使用,类似标注函数aggregate
install.packages("dplyr")
library(dplyr)
# 用iris数据集作为演示,用head()函数查看其前6行:
head(iris)
mutate()函数的使用:
mutate()函数是对已有列数据变换并添加为新的列,类似标准函数transform:
# 添加一个新的列new,并且new是Sepal.Length和Sepal.Width的乘积:
df_mutate<- mutate(iris, new = Sepal.Length * Sepal.Width)
head(df_mutate)
select() 函数的使用:
按照列名筛选列,可结合starts_with,ends_with,contains,matches,one_of,num_range和everything等使用:
# 变量名称以Petal开头的变量
df_select<- select(iris, starts_with("Petal"))
# 变量名称以Width结尾的变量
df_select<- select(iris, ends_with("Width"))
# 变量名称包含etal的变量
df_select<- select(iris, contains("etal"))
# 变量名称匹配t的变量
df_select<- select(iris, matches(".t."))
# 只筛选Petal.Length,Petal.Width两个变量
df_select<- select(iris, Petal.Length, Petal.Width)
# 筛选所有的变量
df_select<- select(iris, everything())
# 把需要的变量赋值给vars,然后用one_of模式筛选
vars<- c("Petal.Length", "Petal.Width")
df_select<- select(iris, one_of(vars))
filter() 函数的使用:
按照已定条件对行做过滤,类似标准函数subset,在使用filter之前需要了解一下几个逻辑操作符:
· ==, >, >=, <, <=, %in%
· &, |, !, xor()
· is.na()
· between(), near()
# 筛选Species是setosa的数据
df_filter<- filter(iris, Species == "setosa")
# 筛选Sepal.Length大于5,并且Species是setosa的数据
df_filter<- filter(iris, Sepal.Length > 5 & Species == "setosa")
# 筛选Sepal.Length大于5,并且Species包含在c("setosa","versicolor")中的数据
df_filter<- filter(iris, Sepal.Length > 5 & Species %in%c("setosa","versicolor"))
arrange() 函数的使用:
对数据进行排序,类似标准函数order:
# 按照Sepal.Length从小到大排序
df_arrange<- arrange(iris, Sepal.Length)
# 双变量排序,按照Sepal.Length从小到达,并且按照Sepal.Width从大到小排序
# desc()表示从大到小
df_arrange<- arrange(iris, Sepal.Length, desc(Sepal.Width))
summarise函数的使用:
对数据进行汇总操作,可结合group_by使用:
# 计算Sepal.Length的平均值和标准差:
df_summarise<- summarise(iris, mean(Sepal.Length), sd(Sepal.Length))
# 按照Species分组,计算Sepal.Length的平均值和标准差
iris_groups<- group_by(iris, Species)
df_summarise<- summarise(iris_groups, mean(Sepal.Length), sd(Sepal.Length))
# dplyr的计算是以tbl格式返回的,我们可以转成dataframe, 当然这步没必要,但是为了方便显示:
df_summarise<- as.data.frame(df_summarise)
本文重点介绍这5个函数,当然dplyr包还有其他比较方便的函数,比如join,set,distinct,sample,bind,ifelse等函数,也是非常有用,感兴趣的同学可以去学习一下。
/End.
扫码关注,获取更多精彩内容
我
是
彩
蛋
喜马拉雅FM搜索并订阅:生信者言;收听内容:
《一分钟听懂NGS基础概念》,让生信分析不再遥不可及
《亲爱的姑娘,你值得被温柔以待》,11个真实的人物故事
《众病之王:癌症传》,一起聆听人类对抗癌症的斗争史
回复文字:果然科学,看一篇好玩的科普文。